from .find import find_element
from utils.selenium.highlighted import ElementHighlighted
from utils.selenium.perform import WPerform


def run_multiple_operation(perform: WPerform, item: dict, func, query: tuple, other_query: dict):
    """
    执行多个操作
    :param perform: 执行对象
    :param item: 用例数据
    :param func: 执行的方法（方法名或者方法函数），如果是方法名就执行driver下面的相应方法
    :param query: 方法的参数（元祖类型）
    :param other_query: 顶层带过来的额外参数
    :return:
    """
    find_data = find_element(perform, item)
    if type(find_data) == list:
        for index in range(len(find_data)):
            multiple_option_interval = item.get('multiple_option_interval')
            perform.sleep(multiple_option_interval)
            element = find_data[index]
            # 有间隔数据并且间隔数据大于1 才分别显示
            if multiple_option_interval is not None and multiple_option_interval > 0:
                ElementHighlighted.highlighted(perform, element)
            perform.send_msg('多操作执行【%d】' % (index + 1))
            if type(func) == str:
                getattr(element, func)(*query)
            else:
                func(perform, element, item, *query)
            # 执行子操作模板
            sub_templates = item.get('sub_templates', [])
            for sub_template in sub_templates:
                perform.send_msg('子操作模板【%s】开始' % sub_template.get('name'))
                other_query.get('run_use_case')(use_case=sub_template, **other_query)
                perform.send_msg('子操作模板【%s】执行完成' % sub_template.get('name'))
    else:
        if type(func) == str:
            getattr(find_data, func)(*query)
        else:
            func(perform, find_data, item, *query)